use std::convert::From;
use std::task::Poll::Pending;

#[derive(Debug)]
struct Number {
    value: i32,
}

impl From<i32> for Number {
    fn from(item:i32) -> Self {
        Number {
            value:item
        }
    }
}
//From trait 允许一种类型定义 “怎么根据另一种类型生成自己”，
// 因此它提供了一种类型转换的简单机制。在标准库中有无数 From 的实现，
// 规定原生类型及其他常见类型的转换功能。
pub fn example() {
    let my_string = String::from("111");
    let num = Number::from(30);
    println!("My number is {:?}",num);
    //Into trait 就是把 From trait 倒过来而已。也就是说，
    // 如果你为你的类型实现了 From，那么同时你也就免费获得了 Into。
    // 使用 Into trait 通常要求指明要转换到的类型，
    // 因为编译器大多数时候不能推断它。不过考虑到我们免费获得了 Into，这点代价不值一提。
    let int = 5;
    let num: Number = int.into();
    println!("My number is {:?}",num);
}